<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--- 简述页面的结构组成?以及每部分功能?-->
		<p>
			目前的网页一般分为三部分：
				页头（一般是放网站logo和导航链接）
				主体（就是网页内容部分）
				页尾（版权申明、使用协议等，也可放一些导航链接）
					网页是一个包含HTML标签的纯文本文件，它可以存放在世界某个角落的某一台计算机中，是万维网中的一“页”，
					是超文本标记语言格式（标准通用标记语言的一个应用，文件扩展名为.html或.htm）。
					网页通常用图像档来提供图画。网页要通过网页浏览器来阅读。
		</p>
		<hr />
		<!--- 列举移动端开发时浏览器会遇到的几种常见兼容问题及解决方案?-->
		<p>
			1.iPhone下非a标签使用$.fn.on委托绑定没有作用。
			　　处理方案，给标签加上cursor属性
				.event{
				    cursor:pointer;
				}
				2.移动端使用iframe加载跨域网页出现“Refused to display in a frame becuase it set 'X-Frame-Options' to 'SAMEORIGIN”
			　　本人使用的跨域页面是移动官网"http://wap.10086.cn/",如果使用pc地址"http://www.10086.cn/"则不会发生此问题。			
			　　原因：出于安全考虑，有的网站屏蔽了外部iframe的调用，比如上面的移动的移动端网页wap,而移动pc端则没有屏蔽。			
			　　解决方案：			
			　　在网上找解决方案，但是没有找到真正有用的。有几个方法被网友认为可行，但是我这里也没有用，详见http://stackoverflow.com/questions/20498831/refused-to-display-in-a-frame-because-it-set-x-frame-options-to-sameorigin			
			　　如果支持前端来说，这个应该是没有解决方案的，毕竟要访问的网页不是自己的。唯一的办法是让后台的同事帮忙使用默认浏览器打开这个网站。			
			3. webview中 sumsung手机使用margin-left:auto;margin-right:auto;来实现水平居中会导致该居中元素的宽度设置失效，宽度会自动填满居中区域。			
			　　解决方案：定位+左距离50%+左偏移元素宽度的一半			
					.center{
					position:relative;
					left:50%;
					margin-left:-100px;
					}
			4.webview中 sumsung定义高度不起作用
			　　解决方案：逼不得已使用padding撑起高度
			5.webview中 sumsung margin-left不起作用
			　　解决方案：逼不得已使用padding-left
			6. webview中 iso input宽度置为0还是有显示区域。解决方法是“width:0px;z-index:-1;border:none”。
			7.多行省略
			　　单行省略比较简单
				white-space:nowrap; 
				text-overflow:ellipsis;
				overflow:hidden;
			　　合适WebKit浏览器或移动端（绝大部分是WebKit内核的）浏览器
			    display: -webkit-box;
			    -webkit-line-clamp: 2;
			    -webkit-box-orient: vertical;
			    overflow: hidden;
		</p>
		<hr />
		<!--- 列举PC端前端开发时浏览器会遇到的几种常见兼容问题以及解决方案?-->
		<p>
			浏览器兼容问题一：不同浏览器的标签默认的外补丁和内补丁不同
			    问题症状：随便写几个标签，不加样式控制的情况下，各自的margin 和padding差异较大。
			    碰到频率:100%
			    解决方案：css里    *{margin:0;padding:0;}
			    备注：这个是最常见的也是最易解决的一个浏览器兼容性问题，几乎所有的css文件开头都会用通配符*来设置各个标签的内外补丁是0。
			浏览器兼容问题二：块属性标签float后，又有横行的margin情况下，在ie6显示margin比设置的大
			    问题症状:常见症状是ie6中后面的一块被顶到下一行
			    碰到频率：90%（稍微复杂点的页面都会碰到，float布局最常见的浏览器兼容问题）
			    解决方案：在float的标签样式控制中加入 display:inline;将其转化为行内属性
			    备注：我们最常用的就是div+css布局了，而div就是一个典型的块属性标签，横向布局的时候我们通常都是用div float实现的，横向的间距设置如果用margin实现，这就是一个必然会碰到的兼容性问题。
			浏览器兼容问题三：设置较小高度标签（一般小于10px），在ie6，ie7，遨游中高度超出自己设置高度
			    问题症状：ie6、7和遨游里这个标签的高度不受控制，超出自己设置的高度
			    碰到频率：60%
			    解决方案：给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。
			    备注：这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是ie8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的，这个标签的高度还是会达到默认的行高。
			浏览器兼容问题四：行内属性标签，设置display:block后采用float布局，又有横行的margin的情况，ie6间距bug（类似第二种）
			    问题症状：ie6里的间距比超过设置的间距
			    碰到几率：20%
			    解决方案：在display:block;后面加入display:inline;display:table;
			    备注：行内属性标签，为了设置宽高，我们需要设置display:block;(除了input标签比较特殊)。在用float布局并有横向的margin后，在ie6下，他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签，所以我们再加上display:inline的话，它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。
			浏览器兼容问题五：图片默认有间距
			    问题症状：几个img标签放在一起的时候，有些浏览器会有默认的间距，加了问题一中提到的通配符也不起作用。
			    碰到几率：20%
			    解决方案：使用float属性为img布局
			    备注：因为img标签是行内属性标签，所以只要不超出容器宽度，img标签都会排在一行里，但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。
			浏览器兼容问题六：标签最低高度设置min-height不兼容
			    问题症状：因为min-height本身就是一个不兼容的css属性，所以设置min-height时不能很好的被各个浏览器兼容
			    碰到几率：5%
			    解决方案：如果我们要设置一个标签的最小高度200px，需要进行的设置为：{min-height:200px; height:auto !important; height:200px; overflow:visible;}
			    备注：在B/S系统前端开时，有很多情况下我们又这种需求。当内容小于一个值（如300px）时。容器的高度为300px；当内容高度大于这个值时，容器高度被撑高，而不是出现滚动条。这时候我们就会面临这个兼容性问题。
			浏览器兼容问题七：透明度的兼容css设置
				方法是：每写一小段代码（布局中的一行或者一块）我们都要在不同的浏览器中看是否兼容，当然熟练到一定的程度就没这么麻烦了。建议经常会碰到兼容性问题的新手使用。很多兼容性问题都是因为浏览器对标签的默认属性解析不同造成的，只要我们稍加设置都能轻松地解决这些兼容问题。如果我们熟悉标签的默认属性的话，就能很好的理解为什么会出现兼容问题以及怎么去解决这些兼容问题。
				/* css hack*/
				我很少使用hacker的，可能是个人习惯吧，我不喜欢写的代码ie不兼容，然后用hack来解决。不过hacker还是非常好用的。
				使用hacker 我可以吧浏览器分为3类：ie6 ；ie7和遨游；其他（ie8 chrome ff safari opera等）
				ie6认识的hacker 是下划线_ 和星号 *
				ie7 遨游认识的hacker是星号 * （包括上面问题6中的 !important也算是hack的一种。不过实用性较小。）
				比如这样一个css设置 height:300px;*height:200px;_height:100px;
				ie6浏览器在读到 height:300px的时候会认为高时300px；继续往下读，他也认识*heihgt， 所以当ie6读到*height:200px的时候会覆盖掉前一条的相冲突设置，认为高度是200px。继续往下读，ie6还认识_height,所以他又会覆盖掉200px高的设置，把高度设置为100px；
				ie7和遨游也是一样的从高度300px的设置往下读。当它们读到*height200px的时候就停下了，因为它们不认识_height。所以它们会把高度解析为200px；
				剩下的浏览器只认识第一个height:300px;所以他们会把高度解析为300px。
				因为优先级相同且想冲突的属性设置后一个会覆盖掉前一个，所以书写的次序是很重要的。
				最后说一下，严谨型的开发人员会有一套合适自己的RESET.CSS。结合自己的经验尽量规避容易出现不兼容的问题。以减少hack的使用，尽量符合W3C的标准。
			
		</p>
		<hr />
		<!--- DOM对象与jQuery对象间的区别及如何转换?-->
		<p>
			$(“字符串”)会返回满足条件的所有元素的一个数组,其中:
		　　字符串以#开头,表示id;
		　　字符串以.开头,表示CSS的class名;
		　　若非以上两种情况,则改字符串表示标签名.		 
		　　$(DOM对象)可以得到一个jQuery对象.
		
			jQuery对象转成DOM对象： 
				两种转换方式将一个jQuery对象转换成DOM对象：[index]和.get(index); 
				(1)jQuery对象是一个数据对象，可以通过[index]的方法，来得到相应的DOM对象。 
				如：var $v =$("#v") ; //jQuery对象 
				var v=$v[0]; //DOM对象 
				alert(v.checked) //检测这个checkbox是否被选中 
				(2)jQuery本身提供，通过.get(index)方法，得到相应的DOM对象 
				如：var $v=$("#v"); //jQuery对象 
				var v=$v.get(0); //DOM对象 
				alert(v.checked) //检测这个checkbox是否被选中 
				
				DOM对象转成jQuery对象: 
				对于已经是一个DOM对象，只需要用$()把DOM对象包装起来，就可以获得一个jQuery对象了。$(DOM对象) 
				如：var v=document.getElementById("v"); //DOM对象 
				var $v=$(v); //jQuery对象 
				转换后，就可以任意使用jQuery的方法了。 
				通过以上方法，可以任意的相互转换jQuery对象和DOM对象。需要再强调注意的是：DOM对象才能使用DOM中的方法，jQuery对象是不可以用DOM中的方法。
			
			
			下面是其它的相关使用方法：
				1、DOM对象转jQuery对象 
				普通的Dom对象一般可以通过$()转换成jQuery对象。 
				
				如：$(document.getElementById("msg")) 
				返回的就是jQuery对象，可以使用jQuery的方法。 
				
				2、jQuery对象转DOM对象 
				由于jQuery对象本身是一个集合。所以如果jQuery对象要转换为Dom对象则必须取出其中的某一项，一般可通过索引取出。 
				如： $("#msg")[0]，$("div").eq(1)[0]，$("div").get()[1]，$("td")[5] 
		</p>
		<hr />
		<!--- 如何获取当前网页及浏览器的相关信息?-->
		<p>
			网页可见区域宽：document.body.clientWidth
			网页可见区域高：document.body.clientHeight			
			网页可见区域宽：document.body.offsetWidth (包括边线的宽)			
			网页可见区域高：document.body.offsetHeight (包括边线的宽)			
			网页正文全文宽：document.body.scrollWidth			
			网页正文全文高：document.body.scrollHeight			
			网页被卷去的高：document.body.scrollTop			
			网页被卷去的左：document.body.scrollLeft			
			网页正文部分上：window.screenTop			
			网页正文部分左：window.screenLeft			
			屏幕分辨率的高：window.screen.height			
			屏幕分辨率的宽：window.screen.width			
			屏幕可用工作区高度：window.screen.availHeight		
			屏幕可用工作区宽度：window.screen.availWidth			
			HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth			
			scrollHeight: 获取对象的滚动高度。			
			scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离			
			scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离			
			scrollWidth:获取对象的滚动宽度			
			offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度			
			offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置			
			offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置			
			event.clientX 相对文档的水平座标			
			event.clientY 相对文档的垂直座标
			event.offsetX 相对容器的水平坐标			
			event.offsetY 相对容器的垂直坐标			
			document.documentElement.scrollTop 垂直方向滚动的值			
			event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量
			<br />
			//navigator代表了浏览器对象,他包含了浏览器的一些信息
			//浏览器的嗅探
			console.log(navigator.userAgent);
			//浏览器代号
			txt="<p>Browser CodeName:"+navigator.appCodeName+"</p>";
			//浏览器名称
			txt+="<p>Browser Name:"+navigator.appName+"</p>";
			//浏览器版本
			txt+="<p>Browser Version:"+navigator.appVersion+"</p>";
			//浏览器启用cookies
			txt+="<p>Cookies Enabled:"+navigator.cookieEnabled+"</p>";
			txt+="<p>Platform"+navigator.platform+"</p>";
			document.getElementById("example").innerHTML=txt;
			//web的主机域名
			document.write(location.hostname+"<br>");
			//返回当前页面的路径和文件名
			document.write(location.pathname+"<br>");
			//返回web主机端口
			document.write(location.port);
			
		</p>
		<hr />
		<!--- 什么是闭包, 使用闭包的优缺点概述?-->
		<p>
			闭包就是能够读取其他函数内部变量的函数。 
			由于在Javascript语言中，只有函数内部的子函数才能读取局部变量，
			因此可以把闭包简单理解成“定义在一个函数内部的函数”。
			
			优点：
			1. 逻辑连续，当闭包作为另一个函数调用的参数时，避免你脱离当前逻辑而单独编写额外逻辑。
			2. 方便调用上下文的局部变量。
			3. 加强封装性，第2点的延伸，可以达到对变量的保护作用。
			缺点：
			闭包有一个非常严重的问题，那就是内存浪费问题，这个内存浪费不仅仅因为它常驻内存，更重要的是，对闭包的使用不当会造成无效内存的产生
		</p>
		<hr />
		
		
		
		
	</body>
</html>
